-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here

local function map(mode, lhs, rhs, opts)
  local options = { noremap = true }
  if opts then
    options = vim.tbl_extend("force", options, opts)
  end
  vim.api.nvim_set_keymap(mode, lhs, rhs, options)
end

local opts = { noremap = true, silent = true }

map("", "H", "5h", {})
map("", "J", "5j", {})
map("", "K", "5k", {})
map("", "L", "5l", {})
map("", "<C-k>", "5<C-y>", {})
map("", "<C-j>", "5<C-e>", {})

--移动窗口位置
map("", "<leader>k", "<C-w>k", {})
map("", "<leader>j", "<C-w>j", {})
map("", "<leader>h", "<C-w>h", {})
map("", "<leader>l", "<C-w>l", {})

-- split the screens to up (horizontal), down (horizontal), left (vertical), right (vertical)
map("n", "sh", ":vsp<CR>:set splitright<CR>")
map("n", "sl", ":vsp<CR>")
map("n", "sk", ":sp<CR>:set splitbelow<CR>")
map("n", "sj", ":sp<CR>")
map("n", "sc", "<C-w>c")
map("n", "sq", "<cmd>:bd<cr>")

-- Place the two screens up and down
map("", "ss", "<C-w>t<C-w>K", {})
-- Place the two screens side by side
map("", "sv", "<C-w>t<C-w>H", {})

-- 光标跳转至行首
map("", "E", "^", {})
-- 光标跳转至行尾
map("", "B", "$", {})

-- 取消高亮
-- map('', '<leader>/', ':noh<CR>')

-- 缩进管理
map("n", "<", "<<", {})
map("n", ">", ">>", {})

map("n", ";", ":", {})

-- Shortcut for quiting and saving
map("", "Q", ":q!<cr>", {})
map("", "<C-s>", ":w<cr>", {})
map("", "zz", ":wq<cr>", {})

-- Copy and Past from the system clipboard
map("v", "Y", '"+y', {})
--map('n', 'P', '"+p', {})
map("n", "<C-z>", "u", {})
map("n", "<C-y>", "<C-r>", {})

-- 全选
map("n", "<C-a>", "ggVG", { silent = true })

-- 选择单词
map("", "W", "viw", {})

-- 无效按键
map("", "u", "<nop>", {})
map("", "s", "<nop>", {})
map("", "S", "<nop>", {})

-- 插件管理
map("", "<leader>pp", ":Lazy<CR>", {})

-- 保存root权限文件
map("", "ws", ":w !sudo tee > /dev/null %<cr>", {})

-- Some functional configuration
-- map("n", "<backspace>", ":noh<cr>", {}) -- cancel highlight that from search

-- 开始宏录制:qx
-- 执行宏录制
map("", "<space>qw", ":normal @", {})
